package rickyGame.game.action
{
	import ricky.game.Actor;
	
	import rickyGame.game.Building;
	import rickyGame.game.Fighter;
	import rickyGame.game.GameState;
	import rickyGame.game.Goods;
	import rickyGame.game.Player;
	import rickyGame.game.skill.SkillData;
	import rickyGame.game.skill.SkillEffectTargetType;
	import rickyGame.net.MsgType;
	import rickyGame.net.WorkQueue;

	public class ActUtils
	{
		public function ActUtils()
		{
		}
		
//		/**
//		 * 过滤可攻击对象
//		 */
//		public static function filterSkillEffect(item:*, index:int, array:Array):Boolean
//		{
//			return item is Fighter;
//		}
		
		/**
		 * 搜索技能影响的周围的玩家
		 */
		public static function searchAround(actor:Actor,skill:SkillData,x:Number,y:Number):Array
		{
			var objs:Array=[];
			var raido:int=skill.effectRange;
			objs=GameState.inst.sceneManager.getPointAround(x,y,raido);
				
			objs=filterTarget(actor,objs,skill);
			return objs;
		}
		
		/**
		 * 筛选目标
		 */
		public static function filterTarget(actor:Actor,targets:Array,skill:SkillData):Array
		{
			var objs:Array=targets;

//			if(skill.effectTarget.indexOf(SkillEffectTargetType.self)>=0) //如果影响自己
//			{
//				objs.push(actor);
//				return objs;
//			}
			
			var self:Boolean=false;
			var unit:Boolean=false;//默认是对单位有效
			var building:Boolean=false;//对建筑物
			var goods:Boolean=false;
			var enemy:Boolean=false;//对敌军
			var friends:Boolean=false;//对友军
			var death:Boolean=false;//对死亡单位

			if(skill.effectTarget.indexOf(SkillEffectTargetType.self)>=0) //如果影响自己
				self=true;
				
			if(skill.effectTarget.indexOf(SkillEffectTargetType.unit)>=0)//对普通单位
				unit=true;
			
			if(skill.effectTarget.indexOf(SkillEffectTargetType.building)>=0)//对建筑
				building=true;
			
			if(skill.effectTarget.indexOf(SkillEffectTargetType.goods)>=0)//对物品
				goods=true;
			
			if(skill.effectTarget.indexOf(SkillEffectTargetType.enemy)>=0)//对敌军
				enemy=true;
			
			if(skill.effectTarget.indexOf(SkillEffectTargetType.friends)>=0)//对友军
				friends=true;
			
			if(skill.effectTarget.indexOf(SkillEffectTargetType.death)>=0) //可以对死亡单位
				death=true;
			
			var myFunction:Function= function callback(item:*, index:int, array:Array):Boolean
			{
				var re:Boolean=false;//默认不攻击任何对象
				
				if(unit && (item is Player))//如果包括单位 目标是单位
					re= true; 
				
				if(!re && building && (item is Building))//如果目标包含建筑不是建筑
					re= true; //返回
				
				if(!re && goods && (item is Goods))//目标包含物品
					re=true;
				
				if(!re && self && item== actor) //如果包括自己
					re=true;
				
				if(re && enemy && (item.group== actor.group)) //如果包含敌人
					re=false;//目标包含敌人
				
				if(re && friends && item.group!= actor.group)//目标保护友军
					re=false;
				
				if(death) //如果包括死亡单位
				   return re; //包含死亡
				else
					return re && (item.isDead==false); //没有死亡才能选中
				
			};
			
			objs=objs.filter(myFunction);
			return objs;
		}

	}
}